<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 手写call
      // let obj = {
      //   name: 'zs',
      // };
      // function fn() {
      //   return this.name;
      // }
      // Function.prototype.mycall = function (context) {
      //   if (typeof this !== 'function') {
      //     throw new Error('error');
      //   }
      //   context = context || window;
      //   context.fn = this;
      //   let args = [...arguments].slice(1);
      //   let result = context.fn(...args);
      //   delete content.fn;
      //   return result;
      // };
      // console.log(fn.call(obj, 1, 2, 3));

      // 手写浅拷贝和深拷贝
      // let obj = {
      //   name: 'zs',
      //   age: 10,
      //   data: [1, 2, 3],
      // };
      // function shallowCopy(obj) {
      //   let newObj = obj instanceof Array ? [] : {};
      //   for (let k in obj) {
      //     newObj[k] = obj[k];
      //   }
      //   return newObj;
      // }
      // let newObj1 = shallowCopy(obj);
      // newObj1.data[0] = 4;
      // console.log(obj);
      // console.log(newObj1);

      // function deepCopy(obj) {
      //   let newObj = obj instanceof Array ? [] : {};
      //   for (let [k, v] of Object.entries(obj)) {
      //     newObj[k] = typeof v == 'object' ? deepCopy(v) : v;
      //   }
      //   return newObj;
      // }
      // let newObj2 = deepCopy(obj);
      // newObj2.data[0] = 4;
      // console.log(newObj2);
      // console.log(obj);
    </script>
  </body>
</html>
